{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# sklearn-LDA"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "代码示例：https://mp.weixin.qq.com/s/hMcJtB3Lss1NBalXRTGZlQ （玉树芝兰） <br>\n",
    "可视化：https://blog.csdn.net/qq_39496504/article/details/107125284  <br>\n",
    "sklearn lda参数解读:https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.LatentDirichletAllocation.html\n",
    "<br>中文版参数解读：https://blog.csdn.net/TiffanyRabbit/article/details/76445909\n",
    "<br>LDA原理-视频版：https://www.bilibili.com/video/BV1t54y127U8\n",
    "<br>LDA原理-文字版：https://www.jianshu.com/p/5c510694c07e\n",
    "<br>score的计算方法：https://github.com/scikit-learn/scikit-learn/blob/844b4be24d20fc42cc13b957374c718956a0db39/sklearn/decomposition/_lda.py#L729\n",
    "<br>主题困惑度1：https://blog.csdn.net/weixin_43343486/article/details/109255165\n",
    "<br>主题困惑度2：https://blog.csdn.net/weixin_39676021/article/details/112187210"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import pandas as pd\n",
    "import re\n",
    "import jieba\n",
    "import jieba.posseg as psg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "output_path = 'D:/python/lda/result'\n",
    "file_path = 'D:/python/lda/data'\n",
    "os.chdir(file_path)\n",
    "data=pd.read_excel(\"data.xlsx\")#content type\n",
    "os.chdir(output_path)\n",
    "dic_file = \"D:/python/lda/stop_dic/dict.txt\"\n",
    "stop_file = \"D:/python/lda/stop_dic/stopwords.txt\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def chinese_word_cut(mytext):\n",
    "    jieba.load_userdict(dic_file)\n",
    "    jieba.initialize()\n",
    "    try:\n",
    "        stopword_list = open(stop_file,encoding ='utf-8')\n",
    "    except:\n",
    "        stopword_list = []\n",
    "        print(\"error in stop_file\")\n",
    "    stop_list = []\n",
    "    flag_list = ['n','nz','vn']\n",
    "    for line in stopword_list:\n",
    "        line = re.sub(u'\\n|\\\\r', '', line)\n",
    "        stop_list.append(line)\n",
    "    \n",
    "    word_list = []\n",
    "    #jieba分词\n",
    "    seg_list = psg.cut(mytext)\n",
    "    for seg_word in seg_list:\n",
    "        word = re.sub(u'[^\\u4e00-\\u9fa5]','',seg_word.word)\n",
    "        find = 0\n",
    "        for stop_word in stop_list:\n",
    "            if stop_word == word or len(word)<2:     #this word is stopword\n",
    "                    find = 1\n",
    "                    break\n",
    "        if find == 0 and seg_word.flag in flag_list:\n",
    "            word_list.append(word)      \n",
    "    return (\" \").join(word_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Building prefix dict from the default dictionary ...\n",
      "Loading model from cache C:\\Users\\17888\\AppData\\Local\\Temp\\jieba.cache\n",
      "Loading model cost 1.157 seconds.\n",
      "Prefix dict has been built successfully.\n"
     ]
    }
   ],
   "source": [
    "data[\"content_cutted\"] = data.content.apply(chinese_word_cut)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## LDA分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n",
    "from sklearn.decomposition import LatentDirichletAllocation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def print_top_words(model, feature_names, n_top_words):\n",
    "    tword = []\n",
    "    for topic_idx, topic in enumerate(model.components_):\n",
    "        print(\"Topic #%d:\" % topic_idx)\n",
    "        topic_w = \" \".join([feature_names[i] for i in topic.argsort()[:-n_top_words - 1:-1]])\n",
    "        tword.append(topic_w)\n",
    "        print(topic_w)\n",
    "    return tword"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_features = 1000 #提取1000个特征词语\n",
    "tf_vectorizer = CountVectorizer(strip_accents = 'unicode',\n",
    "                                max_features=n_features,\n",
    "                                stop_words='english',\n",
    "                                max_df = 0.5,\n",
    "                                min_df = 10)\n",
    "tf = tf_vectorizer.fit_transform(data.content_cutted)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LatentDirichletAllocation(learning_offset=50, max_iter=50, n_components=8,\n",
       "                          random_state=0)"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_topics = 8\n",
    "lda = LatentDirichletAllocation(n_components=n_topics, max_iter=50,\n",
    "                                learning_method='batch',\n",
    "                                learning_offset=50,\n",
    "#                                 doc_topic_prior=0.1,\n",
    "#                                 topic_word_prior=0.01,\n",
    "                               random_state=0)\n",
    "lda.fit(tf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 输出每个主题对应词语 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Topic #0:\n",
      "电影 票房 影片 观众 作品 故事 电影节 市场 娱乐 主演 合作 公司 内地 香港电影 新片 角色 制作 方面 媒体 本片 太空 剧本 成绩 人生 奖项\n",
      "Topic #1:\n",
      "主队 赔率 主场 联赛 公司 足彩 客场 客胜 比赛 本场 客队 平局 博彩 指数 调整 优势 意甲 半球 赢球 实力 一球 交锋 情况 冷门 历史\n",
      "Topic #2:\n",
      "主持人 工作 时间 研究 演员 生活 新浪 朋友 过程 人们 感觉 记者 科学家 人类 问题 现场 孩子 地方 事情 世界 经历 历史 老师 人员 网友\n",
      "Topic #3:\n",
      "专家 网友 老师 压力 走势 分析 突破 黄金 股票 问题 大盘 建议 成本 新浪 整理 调整 机会 坐堂 趋势 股市 后市 行情 市场 价位 公司\n",
      "Topic #4:\n",
      "比赛 球队 火箭 球员 数据 时间 篮板 奇才 问题 新浪 体育讯 助攻 机会 主场 状态 湖人 训练 内线 情况 球迷 火箭队 能力 客场 投篮 命中率\n",
      "Topic #5:\n",
      "项目 建筑 发展 生活 地产 空间 市场 区域 新浪 户型 活动 产品 设计 房子 别墅 国际 主持人 文化 客户 集团 论坛 艺术 开发商 功能 住宅\n",
      "Topic #6:\n",
      "游戏 比赛 电子竞技 玩家 网站 手机 总决赛 项目 冠军 战队 赛事 赛区 互联网 奖金 网络 世界 用户 全国 星际争霸 公司 视频 网吧 现场 决赛 时间\n",
      "Topic #7:\n",
      "学生 经济 投资 问题 市场 公司 大学 政府 学校 计划 政策 企业 国家 情况 专业 教育 银行 影响 发展 能力 资金 机构 国际 基金 方面\n"
     ]
    }
   ],
   "source": [
    "n_top_words = 25\n",
    "tf_feature_names = tf_vectorizer.get_feature_names()\n",
    "topic_word = print_top_words(lda, tf_feature_names, n_top_words)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 输出每篇文章对应主题 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [],
   "source": [
    "topics=lda.transform(tf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [],
   "source": [
    "topic = []\n",
    "for t in topics:\n",
    "    topic.append(list(t).index(np.max(t)))\n",
    "data['topic']=topic\n",
    "data.to_excel(\"data_topic.xlsx\",index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.00277842, 0.00277847, 0.00278347, 0.00277921, 0.94701711,\n",
       "       0.00278748, 0.0362966 , 0.00277924])"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "topics[0]#0 1 2 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 可视化 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pyLDAvis\n",
    "import pyLDAvis.sklearn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Note: if you're in the IPython notebook, pyLDAvis.show() is not the best command\n",
      "      to use. Consider using pyLDAvis.display(), or pyLDAvis.enable_notebook().\n",
      "      See more information at http://pyLDAvis.github.io/quickstart.html .\n",
      "\n",
      "You must interrupt the kernel to end this command\n",
      "\n",
      "Serving to http://127.0.0.1:8889/    [Ctrl-C to exit]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "127.0.0.1 - - [16/Oct/2021 23:36:00] \"GET / HTTP/1.1\" 200 -\n",
      "127.0.0.1 - - [16/Oct/2021 23:36:00] \"GET /LDAvis.css HTTP/1.1\" 200 -\n",
      "127.0.0.1 - - [16/Oct/2021 23:36:01] \"GET /d3.js HTTP/1.1\" 200 -\n",
      "127.0.0.1 - - [16/Oct/2021 23:36:01] \"GET /LDAvis.js HTTP/1.1\" 200 -\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "stopping Server...\n"
     ]
    }
   ],
   "source": [
    "pyLDAvis.enable_notebook()\n",
    "pic = pyLDAvis.sklearn.prepare(lda, tf, tf_vectorizer)\n",
    "pyLDAvis.save_html(pic, 'lda_pass'+str(n_topics)+'.html')\n",
    "pyLDAvis.show(pic)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 困惑度 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "2\n",
      "3\n",
      "4\n",
      "5\n",
      "6\n",
      "7\n",
      "8\n",
      "9\n",
      "10\n",
      "11\n",
      "12\n",
      "13\n",
      "14\n",
      "15\n"
     ]
    }
   ],
   "source": [
    "plexs = []\n",
    "scores = []\n",
    "n_max_topics = 16\n",
    "for i in range(1,n_max_topics):\n",
    "    print(i)\n",
    "    lda = LatentDirichletAllocation(n_components=i, max_iter=50,\n",
    "                                    learning_method='batch',\n",
    "                                    learning_offset=50,random_state=0)\n",
    "    lda.fit(tf)\n",
    "    plexs.append(lda.perplexity(tf))\n",
    "    scores.append(lda.score(tf))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_t=15#区间最右侧的值。注意：不能大于n_max_topics\n",
    "x=list(range(1,n_t))\n",
    "plt.plot(x,plexs[1:n_t])\n",
    "plt.xlabel(\"number of topics\")\n",
    "plt.ylabel(\"perplexity\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_t=15#区间最右侧的值。注意：不能大于n_max_topics\n",
    "x=list(range(1,n_t))\n",
    "plt.plot(x,scores[1:n_t])\n",
    "plt.xlabel(\"number of topics\")\n",
    "plt.ylabel(\"score\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "303.324px",
    "left": "114px",
    "top": "110.322px",
    "width": "165px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
